草庐IT

MySQL unicode 文字

全部标签

c++ - 为什么某些 C++ 编译器允许您获取文字的地址?

一个我不会说出名字的C++编译器让你获取文字的地址,int*p=&42;显然42是一个r值,大多数编译器拒绝这样做。为什么编译器会允许这样做?除了搬起石头砸自己的脚,你还能用它做什么? 最佳答案 如果您需要一个指向值为42的整数的指针怎么办?:)C++引用很像自动解除引用的指针。可以创建对文字的常量引用,如下所示:constint&x=42;它实际上要求编译器用值为42的整数地址初始化一个指针,您随后可能会这样做:constint*y=&x;结合这一点,编译器需要有逻辑来区分一个值没有被取地址,一个已经取地址,所以它知道将它存储在内

c++ - 为什么 clang 将其解析为用户定义的文字?

我有一些正在维护的代码,我已经开始在clang3.3下编译这些代码。使用“-std=c++11”编译时,clang会生成错误(如下所示)。我已将有问题的代码提炼为以下内容:#include#defineDBG_PRT(__format,...)\printf("%s:%d:%s:"__format,__FILE__,\__LINE__,__FUNCTION__,##__VA_ARGS__)intmain(){DBG_PRT("%s\n","Hi");}这是clang的输出:test.cpp:10:5:error:nomatchingliteraloperatorforcallto'op

c++ - 在预处理器条件中使用 bool 文字是否有效?

考虑以下代码,它导致bool文字true在预处理器条件中被评估:#defineSOME_MACROtrueintmain(){#ifSOME_MACROreturn1;#elsereturn0;#endif}Clang3.4和GCC4.8都接受此代码,即使使用-pedantic-std=c++11-Wall-Wextra。VisualStudio2013以fatalerrorC1017:invalidintegerconstantexpression拒绝它.我对n3376的阅读§16.1是应该应用评估常量表达式的常规C++规则。如果是这样,这段代码是有效的,如果MSVC不接受它,它就是

c++ - 字符串文字不能有外部链接是否有原因?

想要具有外部链接的字符串文字背后的主要动机是tousestringliteralsasnon-typetemplateparameters.我会想象一个带有外部链接的字符串文字,其定义类似于Astring-literalthathasaneintheprefixisastring-literalwithexternallinkage.templatestructS{};voidbar(){Ss;}willhavebehaviourequivalenttotemplatestructS{};constexprchar__foo[]="foo";voidbar{Ss;}有没有理由不使用外部

c++ 是指向文字的常量指针有效吗?

我知道左值可以转换为常量引用。我很好奇我是否可以获得指向这些左值的指针。如果我写constint*p=&3;//ERROR:lvaluerequiredasunaryoperand'&'我收到这个错误。然而,constint*p=&((constint&)3);这个编译。在这种情况下,*p的结果是否保证为3? 最佳答案 这构造了一个临时的int(3)并将其绑定(bind)到一个const引用。p指向那个临时的。临时对象的生命周期被延长以匹配引用的生命周期——但引用本身是一个临时对象并在分号处被销毁,留下p一个悬空指针。之后任何使用p

c++ - 为什么文字不是 const(字符串除外)?

文字通常是prvalue。字符串是一种特殊情况,定义为char数组(意思是lvalue)。这个问题专门针对非字符串文字。为什么非字符串文字不是const?foo(42);//passesfooan`int`,nota`constint`.您不能修改非字符串字面量,所以它不是const吗? 最佳答案 文字答案可能是因为文字早于const添加到语言中,所以它们自然不是const。但实际的答案是-const纯右值从根本上来说是很奇怪的东西。您不能从任何基本类型创建它们,但您可以拥有类类型的const纯右值。但为什么?通常,我们将事物设为c

uitextfield的宽度永远不会少于占位符文字的宽度

我有一个UITextField和UILabel坐在一起UIView因此:在这里,它在xcode中:该标签被隐藏在用户进入文本字段的文本之前,因此它为数字条目提供了持久的“后缀”。问题是,当用户在文本字段中键入一个数字时,它不会缩小到文本的大小,即使不可见,它仍处于原始占位符的大小,即:我有什么办法可以将文本字段的宽度限制为适应用户文本的最小尺寸,而不必注意隐形占位符文本的宽度?谢谢看答案我自己解决了:每当编辑文本时,都会检查文本字段以查看内部是否有任何文本。如果没有文本,则隐藏了“mg”后缀,并添加了占位符。如果有文本,则显示“mg”后缀占位符被删除。像这样:(迅速)functextField

c++ - 为什么 boost::any 不保存字符串文字?

#include#include#include#includestruct_time_t{intmonth;intyear;};intmain(){std::stringstr="hahastr";_time_tt;std::vectorobjVec;objVec.push_back(1);char*pstr="haha";//boost::anycharArr="haha";notcompile//objVec.push_back("haha");notcompileobjVec.push_back(pstr);objVec.push_back(str);objVec.push_b

c++ - S 不是文字类型吗?

此代码无法在Coliru中编译,尽管它似乎符合iso§5.19p2第9个要点和iso§3.9p10,即S是文字类型,因此Sa(1);应该被认为是一个常量表达式。特别是,iso§3.9p10bulletpoint3没有提及任何关于非初始化成员的内容。#includestructS{inti;floatx;constexprS(intj):i{j}{}};intmain(){constexprSa(1);} 最佳答案 这是在7.1.5/4中标准化的([dcl.constexpr],“constexpr说明符”):Thedefinitio

c++ - 为什么不将字符串文字作为对数组的引用而不是不透明指针传递?

在C++中,字符串文字的类型是constchar[N],其中N,如std::size_t,是字符数加一(零字节终止符)。它们驻留在静态存储中,从程序初始化到终止都可用。通常,采用常量字符串的函数不需要std::basic_string接口(interface),或者更愿意避免动态分配;例如,他们可能只需要字符串本身及其长度。std::basic_string尤其必须提供一种从语言的native字符串文字构造的方法。这些函数提供了一个采用C风格字符串的变体:voidfunction_that_takes_a_constant_string(constchar*/*const*/s);//